A host system may comprise an I/O host controller (hardware), an input/output (I/O) host software (e.g., a driver), and a target I/O device. The host controller may communicate with the target I/O device to send/receive tasks (e.g., data, commands, etc.) The host software may provide the tasks to the host controller.
Hardware operating errors sometimes occur, for instance, in a controller. Because hardware works faster than software, it is difficult for software to intervene, for example, to recover from or correct such errors. In many cases, the event which required intervention has already passed, and the state of the host system has changed by the time it takes for software to respond. Moreover, the hardware (e.g., controller) may still be performing operations when the software is trying to investigate its state (e.g., state of the host controller and the host system).
Consequently, there is a need to provide a mechanism to allow software to efficiently intervene in the operation of hardware to recover from errors.